﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
public class TipoProducto : Conexion
{
    private int id;
    private String descripcion;
    private String estado;

	public TipoProducto()
	{
		
	}

    
   
    /**
     * Registra un tipo de producto en la base de datos
     */
    public void Guardar()
    {
        SentenciaSQL = "insert into tipo_producto(id_tipo_producto, descripcion, estado) values(nextval('sq_tipo_producto'), '" + Descripcion + "','" + Estado + "');";
        AbrirConexion();
        IniciarTransaccion();
        try
        {
            EjecutarComando();
            ConfirmarTransaccion();
        }
        catch (ConexionException ex)
        {
            CancelarTransaccion();
            throw new ConexionException("no se pudo registrar el tipo de producto", ex);
        }
        finally {
            CerrarConexion();
        }
    }


    /**
     * Actualiza los datos de un tipo de producto
     */
    public void Actualizar()
    {
        AbrirConexion();
        IniciarTransaccion();
        try
        {        
            SentenciaSQL = "update tipo_producto set descripcion = '"+ Descripcion +"', estado = '" + Estado + "' where id_tipo_producto = " + Id + ";";
            EjecutarComando();
            ConfirmarTransaccion();
        }
        catch (ConexionException ex)
        {
            CancelarTransaccion();
            throw new ConexionException("ocurrio un error al intentar modificiar el tipo", ex);
        }
        finally
        {
            CerrarConexion();
        }

    }

    /*
    * Borra un Tipo de producto 
    * Cambia el estado del tipo a 'b' -> borrado
    */
    public void Borrar()
    {
        SentenciaSQL = "update tipo_producto set estado = 'b' where id_tipo_producto = " + Id + " ;";

        AbrirConexion();
        IniciarTransaccion();
        try
        {
            EjecutarComando();
            ConfirmarTransaccion();
        }
        catch (Exception ex)
        {
            CancelarTransaccion();
            throw new ConexionException("no se pudo eliminar el tipo", ex);
        }
        finally
        {
            CerrarConexion();
        }
    }

    /**
    * Busca los tipos de producto que coinciden con los parametros de busqueda
    * @param desc descripcion del tipo de producto
    * @returm dataset con el resultado de la busqueda
    */
    public DataSet Buscar(String desc)
    {
        DataSet ds = new DataSet();

        SentenciaSQL = "select * from tipo_producto where estado <> 'b' and descripcion like '%" + desc + "%';";
        AbrirConexion();
        IniciarTransaccion();
        try
        {
            ds = EjecutarComandoDataSet();
            ConfirmarTransaccion();
        }
        catch (Exception ex)
        {
            CancelarTransaccion();
            throw new ConexionException("ocurrio un error al realizar la busqueda", ex);
        }
        finally
        {
            CerrarConexion();
        }

        return ds;

    }
    /**
     * Lista todos los registros
     */
    public DataSet Listar()
    {
        DataSet ds = new DataSet();

        SentenciaSQL = "select * from tipo_producto where estado <> 'b' order by descripcion;";
        AbrirConexion();
        IniciarTransaccion();
        try
        {
            ds = EjecutarComandoDataSet();
            ConfirmarTransaccion();
        }
        catch (Exception ex)
        {
            CancelarTransaccion();
            throw new ConexionException("no se pudieron listar los registros", ex);
        }
        finally
        {
            CerrarConexion();
        }

        return ds;

    }
    
    public int Id 
    {
        get { return this.id; }
        set { this.id = value; }
    }
    public String Descripcion
    {
        get { return this.descripcion; }
        set { this.descripcion = value; }
    }

    public String Estado
    {
        get { return this.estado; }
        set { this.estado = value; }
    }
}
